Механизм асинхронного архивирования
Асинхронное оперативное архивирование выполняется следующим образом:
-
пользователь подает SQL-запрос на запуск оперативного асинхронного архивирования БД и сразу получает от ядра СУБД код завершения об успешном/неуспешном старте процесса;
-
запуск последующих процессов асинхронного архивирования можно выполнять по одному и тому же соединению с БД, не дожидаясь завершения предыдущих процессов;
-
в случае успешного старта процесса асинхронного архивирования СУБД сама выделяет ему отдельный канал для работы с БД;
-
в любом случае (как в случае успешного окончания процесса архивирования, так и неуспешного) этот канал будет корректно закрыт (освобожден) ядром СУБД;
-
взаимодействие с выделенным процессу архивирования каналом выполняет ядро СУБД при обработке SQL-запросов
BACKUP STOP;
Пользователь БД имеет возможность в любой момент времени получить информацию о ходе выполнения асинхронного
архивирования путем выборки нужных данных из системной таблицы $$$INKERNBACK
(например, запросом SELECT * FROM $$$INKERNBACK). При запуске процесса архивирования
в эту таблицу добавляется строка, соответствующая данному процессу, которая в течение архивирования будет периодически
модифицироваться для отражения текущего статуса процесса.
-
в поле
Statusбудет помещено значение в процентах (от 0 до 100) о процессе архивации.
Структура системной таблицы $$$INKERNBACK:
| CREATE TABLE $$$INKERNBACK ( | |
| BackId | INTEGER, |
| UserId | INTEGER, |
| ChannelId | INTEGER, |
| LinterRetCode | INTEGER, |
| Status | INTEGER, |
| StartTime | DATE, |
| EndTime | DATE); |
Описание столбцов таблицы:
| Столбец | Описание | |
|---|---|---|
| BackId | Идентификатор процесса архивирования | |
| UserId | Идентификатор пользователя, подавшего SQL-запрос на оперативное архивирование | |
| ChannelId | Идентификатор канала, открытого для процесса архивирования (канал, который выделяет само ядро СУБД для порожденного процесса) | |
| LinterRetCode | Код завершения процесса архивирования (приложение 1) | |
| Status | Число в процентах, отражающее степень завершения процесса архивирования | |
| StartTime | Дата-время начала процесса архивирования | |
| EndTime | Дата-время окончания процесса архивирования |
Если эта таблица существует, то добавляется соответствующая строчка, содержащая необходимые данные. Наличие таблицы
проверяется на этапе начального запуска in-kernel backup в асинхронном режиме. В случае её отсутствия
будет выведена соответствующая ошибка, и процесс не запустится. Если таблица существует, то в нее добавляется строчка,
содержащая BackId, UserId, ChannelId, LinterRetCode
равный нулю, т.к. пока он не известен, StartTime и EndTime, где StartTime
будет равно EndTime и соответствовать дате-времени старта процесса. По окончании процесса архивации значения
LinterRetCode, Status и EndTime, возможно, изменятся в соответствии с
действительным кодом завершения процесса, состоянием в процентах и реальным окончанием времени завершения процесса.
Все состояния завершения не асинхронных процессов в эту таблицу попадать не будут, т.к. пользователь получает необходимые данные по окончании процесса архивации.